import axios from "axios";

const instance = axios.create({
  baseURL: 'https://some-domain.com/api/',
  timeout: 1000,
  headers: { 'X-Custom-Header': 'foobar' }
});


// 记录取消的
const cacheRequest: { [key: string]: AbortController } = {}

/** 去除需要取消的请求 */
function removeCacheRequest(reqkey) {
  if (cacheRequest[reqkey]) {
    cacheRequest[reqkey].abort()
    delete cacheRequest[reqkey]
  }
}

instance.interceptors.request.use((config) => {
  // 取消重复请求
  const reqKey = `${config.url}&${config.method}`
  removeCacheRequest(reqKey)
  const controller = new AbortController()
  config.signal = controller.signal
  cacheRequest[reqKey] = controller

  return config
}, (error) => {
  return Promise.reject(error)
})

axios.interceptors.response.use(function (response) {
  // 2xx 范围内的状态码都会触发该函数。
  // 对响应数据做点什么
  return response;
}, function (error) {
  if (axios.isCancel(error)) {
    return Promise.reject({
      message: '重复请求，自动拦截并取消'
    })
  }

  // 超出 2xx 范围的状态码都会触发该函数。
  // 对响应错误做点什么
  return Promise.reject(error);
});